package me.sdevil507.org.service;

import me.sdevil507.biz.common.exceptions.KeywordExistedException;
import me.sdevil507.biz.common.exceptions.OrgNameEnExistedException;
import me.sdevil507.biz.common.exceptions.OrgNameZhExistedException;
import me.sdevil507.org.dto.OrgKeywordParamsDto;
import me.sdevil507.org.dto.OrgParamsDto;
import me.sdevil507.org.po.OrgKeywordPo;
import me.sdevil507.org.po.OrgPo;
import me.sdevil507.org.po.OrgUserRelPo;
import me.sdevil507.supports.jpa.PageParamsDTO;
import me.sdevil507.supports.jpa.SortParamsDTO;
import org.springframework.data.domain.Page;

import java.util.List;
import java.util.Map;

/**
 * 机构[OrgService]
 *
 * @author sdevil507
 * created on 2020-07-13 13:40:20
 */
public interface OrgService {

    /**
     * 获取智库机构信息
     *
     * @param orgId 智库机构id
     * @return 智库机构信息
     */
    OrgPo readOne(Long orgId);

    /**
     * 获取组织机构用户关联对象
     *
     * @return 关联对象列表
     */
    List<OrgUserRelPo> readOrgsByAccId();

    List<OrgPo> readAll();

    /**
     * 获取所有智库的类型并分组
     *
     * @return
     */
    Map getAllOrgType(Long userId);

    void deleteAllOrgTypeOfUserId(Long userId);

    /**
     * 分页获取记录
     *
     * @param searchParamsDto 查询DTO
     * @param pageParamsDto   分页DTO
     * @param sortParamsDto   排序DTO
     * @return 分页记录
     */
    Page<OrgPo> readAllByPage(OrgParamsDto searchParamsDto, PageParamsDTO pageParamsDto, SortParamsDTO sortParamsDto);

    /**
     * 创建记录
     *
     * @param dto 传输类
     */
    void create(OrgParamsDto dto) throws OrgNameZhExistedException, OrgNameEnExistedException;

    /**
     * 更新记录
     *
     * @param dto 传输类
     */
    void update(OrgParamsDto dto) throws OrgNameZhExistedException, OrgNameEnExistedException;

    /**
     * 删除记录
     *
     * @param dto 传输类
     */
    void delete(OrgParamsDto dto);

    /**
     * 设置启用/禁用
     *
     * @param dto 传输类
     */
    void enable(OrgParamsDto dto);

    /**
     * 获取机构下关键词数组
     *
     * @param orgId 机构id
     * @return 关键词数组
     */
    List<OrgKeywordPo> readAllKeywords(Long orgId);

    /**
     * 更新机构关键词
     *
     * @param dto 入参
     */
    void updateKeywords(OrgParamsDto dto);

    /**
     * 创建机构关键词
     *
     * @param dto 入参
     * @throws KeywordExistedException 抛出异常
     */
    void createKeyword(OrgKeywordParamsDto dto) throws KeywordExistedException;

    /**
     * 删除机构关键词
     *
     * @param name 关键词
     */
    void deleteKeyword(String name);

    OrgPo getOrgInfoByPreDomainName(String preDomainName);

    OrgPo getOrgInfoByOrgName(String orgName);

    OrgPo getOrgInfoByOrgId(long orgId);

    String getClassifyName(String[] classify);

    String test(Long userId);

    Long getOrgIdByUserId(Long userId);
}